<?php

final class FileUtil
{
    /**
     * 创建文件夹
     * @param string $path 文件夹路径
     * @param int $permissions 文件夹权限 (默认 0755)
     * @return bool 成功返回 true，失败抛出异常
     * @throws Exception
     */
    private function __construct(){}

    private function __clone(){}


    public static function createFolder(string $path, int $permissions = 0755): bool
    {
        if (file_exists($path)) {
            if (is_dir($path)) {
                return true; // 文件夹已存在
            }
            throw new Exception("路径已存在，但不是文件夹：$path");
        }

        if (mkdir($path, $permissions, true)) {
            return true; // 创建成功
        }

        throw new Exception("无法创建文件夹：$path");
    }

    /**
     * 创建文件
     * @param string $filePath 文件路径
     * @param string|null $content 文件内容，默认为空
     * @return bool 成功返回 true，失败抛出异常
     * @throws Exception
     */
    public static function createFile(string $filePath, string $content = ''): bool
    {
        $directory = dirname($filePath);

        // 确保目录存在
        self::createFolder($directory);

        if (file_exists($filePath)) {
            throw new Exception("文件已存在：$filePath");
        }

        // 创建文件并写入内容
        if (file_put_contents($filePath, $content) !== false) {
            return true;
        }

        throw new Exception("无法创建文件：$filePath");
    }

    /**
     * 检查文件或文件夹是否存在
     * @param string $path 文件或文件夹路径
     * @return bool 存在返回 true，否则返回 false
     */
    public static function exists(string $path): bool
    {
        return file_exists($path);
    }

    /**
     * 删除文件或文件夹
     * @param string $path 文件或文件夹路径
     * @return bool 成功返回 true，失败抛出异常
     * @throws Exception
     */
    public static function delete(string $path): bool
    {
        if (!file_exists($path)) {
            throw new Exception("路径不存在：$path");
        }

        if (is_file($path)) {
            // 删除文件
            if (unlink($path)) {
                return true;
            }
            throw new Exception("无法删除文件：$path");
        }

        if (is_dir($path)) {
            // 递归删除文件夹
            $files = array_diff(scandir($path), ['.', '..']);
            foreach ($files as $file) {
                self::delete($path . DIRECTORY_SEPARATOR . $file);
            }
            if (rmdir($path)) {
                return true;
            }
            throw new Exception("无法删除文件夹：$path");
        }

        throw new Exception("未知的路径类型：$path");
    }
}

/*
          global $path;
          try {

           //引入类外部定义的变量
           FileUtil::createFolder($path.'/path/to/folder/test/13');
           echo "文件夹创建成功";
       } catch (Exception $e) {
           echo "错误：" . $e->getMessage();
       }

     try {
           FileUtil::createFile($path.'/path/to/folder/test/12/example.txt', "Hello, World!");
           echo "文件创建成功";
       } catch (Exception $e) {
           echo "错误：" . $e->getMessage();
       }

      if (FileUtil::exists($path.'/path/to/folder/test/12/example.txt')) {
          echo "文件存在";
      } else {
          echo "文件不存在";
      }
      try {
          FileUtil::delete($path.'/path/to/folder/test');
          echo "文件或文件夹已删除";
      } catch (Exception $e) {
          echo "错误：" . $e->getMessage();
      }*/